package webservice;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

import org.orm.PersistentException;
import org.orm.PersistentTransaction;

import orm.Ciudad;

import SOAPVO.PersonaSOAPVO;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class PersonaSOA {
 
	public static String mostrarPersonas(){
		String json = null;
				orm.DAOFactory lDAOFactory = orm.DAOFactory.getDAOFactory();
//				Collection<orm.Persona> ormPersonas = Arrays.asList(lDAOFactory.getPersonaDAO().listPersonaByQuery(null, null));
				Collection<PersonaSOAPVO> colecionPersonaSOAPVO= new ArrayList<PersonaSOAPVO>();

				orm.Persona[] ormPersonas = lDAOFactory.getPersonaDAO().listPersonaByQuery(null, null);
				int length = ormPersonas.length;
				for (int i = 0; i < length; i++) {
					System.out.println(ormPersonas[i].getPers_nombre());
					PersonaSOAPVO objeto = PersonaSOAPVO.crearPersonaSOAPVO(ormPersonas[i]);
					colecionPersonaSOAPVO.add(objeto);

				}
				Gson gson = new Gson();
				json = gson.toJson(colecionPersonaSOAPVO); 
		return json;
		
	}
	
	public static String buscarPersona(String nombre){
		
		String json = null;
		orm.DAOFactory lDAOFactory = orm.DAOFactory.getDAOFactory();
//		Collection<orm.Persona> ormPersonas = Arrays.asList(lDAOFactory.getPersonaDAO().listPersonaByQuery(null, null));
		Collection<PersonaSOAPVO> colecionPersonaSOAPVO= new ArrayList<PersonaSOAPVO>();

		orm.Persona[] ormPersonas = lDAOFactory.getPersonaDAO().listPersonaByQuery("Persona.pers_nombre ='"+nombre + "'", null);
		int length = ormPersonas.length;
		for (int i = 0; i < length; i++) {
			System.out.println(ormPersonas[i].getPers_nombre());
			PersonaSOAPVO objeto = PersonaSOAPVO.crearPersonaSOAPVO(ormPersonas[i]);
			colecionPersonaSOAPVO.add(objeto);

		}
		Gson gson = new Gson();
		json = gson.toJson(colecionPersonaSOAPVO); 
		return json;
	}
	
	public static String ingresarPersona(String nombre, String apellido, int direccion, String nombreCiudad) throws PersistentException{
		
		String json = null;
		orm.DAOFactory DAOFactory = orm.DAOFactory.getDAOFactory();
//		Collection<orm.Persona> ormPersonas = Arrays.asList(lDAOFactory.getPersonaDAO().listPersonaByQuery(null, null));
		Collection<PersonaSOAPVO> colecionPersonaSOAPVO= new ArrayList<PersonaSOAPVO>();
		
		PersistentTransaction t = orm.VOSOAPproyectodesarrolloPersistentManager.instance().getSession().beginTransaction();
		try{	
			orm.Ciudad[] ormCiudad = DAOFactory.getCiudadDAO().listCiudadByQuery("Ciudad.ciudad_descripcion ='"+nombreCiudad + "'", null);	
			
			orm.dao.PersonaDAO ormPersonaDAO = DAOFactory.getPersonaDAO();
			orm.Persona ormPersona = ormPersonaDAO.createPersona();
			ormPersona.setPers_nombre(nombre);
			ormPersona.setPers_apellido(apellido);
			ormPersona.setPers_direccion(direccion);
			ormPersona.setCiudades(ormCiudad[0]);
			
			ormPersonaDAO.save(ormPersona);	
			t.commit();
		}
		catch(Exception e){
			t.rollback();
		}
		
		orm.Persona[] ormPersonas = DAOFactory.getPersonaDAO().listPersonaByQuery("Persona.pers_nombre ='"+nombre + "'", null);
		int length = ormPersonas.length;
		for (int i = 0; i < length; i++) {
			System.out.println(ormPersonas[i].getPers_nombre());
			PersonaSOAPVO objeto = PersonaSOAPVO.crearPersonaSOAPVO(ormPersonas[i]);
			colecionPersonaSOAPVO.add(objeto);
		}
		
		Gson gson = new Gson();
		json = gson.toJson(colecionPersonaSOAPVO); 
		return json;
	}	
	
	
	public static int ingresarPersonaJSON(String json) throws PersistentException{
		
		Gson gson = new Gson();
		Type PersonaSOAPVOType = new TypeToken<PersonaSOAPVO>() {}.getType();
		PersonaSOAPVO persona = gson.fromJson(json, PersonaSOAPVOType);
		
		orm.DAOFactory DAOFactory = orm.DAOFactory.getDAOFactory();
		
		PersistentTransaction t = orm.VOSOAPproyectodesarrolloPersistentManager.instance().getSession().beginTransaction();
		
		try{				
			orm.dao.PersonaDAO ormPersonaDAO = DAOFactory.getPersonaDAO();
			orm.Persona ormPersona = ormPersonaDAO.createPersona();
			
			ormPersona.setPers_nombre(persona.getNombre());
			ormPersona.setPers_apellido(persona.getApellido());
			ormPersona.setPers_direccion(persona.getDireccion());
			
			orm.Ciudad[] ormCiudad = DAOFactory.getCiudadDAO().listCiudadByQuery("Ciudad.ciudad_descripcion ='"+persona.getCiudad() + "'", null);	
			
			ormPersona.setCiudades(ormCiudad[0]);
					
			ormPersonaDAO.save(ormPersona);	
			t.commit();
			return 1;
		}
		catch(Exception e){
			t.rollback();
			return 0;
		}
	}	
	
	public static void main(String[] args) {
		try {
			System.out.println(ingresarPersona("Ronald", "Morales", 5, "Temuco"));
		} catch (PersistentException e) {
			System.out.println("Error al ingresar Persona: \n");
			e.printStackTrace();
		}
	}
}
